<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/11/6 0006
 * Time: 15:19
 */

/**
 * 退款接口
 * @link https://global.alipay.com/service/wap_split_cn/11
 */
class GlobalForexRefundBuilder extends AlipayTradeBuilder
{

    /**
     * 外部退款请求的ID
     * @param string $out_return_no
     * @return $this
     */
    public function setOutReturnNo($out_return_no)
    {
        $this->params['out_return_no'] = $out_return_no;
        return $this;
    }

    /**
     * 外部退款请求的ID
     * @return null|string
     */
    public function getOutReturnNo()
    {

        return isset($this->params['out_return_no']) ? $this->params['out_return_no'] : null;
    }

    /**
     * 支付宝合作商户网站唯一订单号。
     * @param string $out_trade_no
     * @return $this
     */
    public function setOutTradeNo($out_trade_no)
    {
        $this->params['out_trade_no'] = $out_trade_no;
        return $this;
    }

    /**
     * 支付宝根据商户请求，创建订单生成的支付宝交易号。
     * 最短16位，最长64位。
     * 建议使用支付宝交易号进行查询，用商户网站唯一订单号查询的效率比较低。
     * @return mixed|null
     */
    public function getOutTradeNo()
    {
        return isset($this->params['out_trade_no']) ? $this->params['out_trade_no'] : null;
    }

    /**
     * 外币退款金额
     * @param float $return_amount
     * @return $this
     */
    public function setReturnAmount($return_amount)
    {
        $this->params['return_amount'] = $return_amount;
        return $this;

    }

    /**
     * 外币退款金额
     * @return null|float
     */
    public function getReturnAmount()
    {
        return isset($this->params['return_amount']) ? $this->params['return_amount'] : null;
    }

    /**
     * 外币币种
     * @param string $currency
     * @return $this
     */
    public function setCurrency($currency)
    {
        $this->params['currency'] = $currency;
        return $this;
    }

    /**
     * 外币币种
     * @return null|string
     */
    public function getCurrency()
    {
        return isset($this->params['currency']) ? $this->params['currency'] : null;
    }

    /**
     * YYYYMMDDHHMMSS 北京时间(+8)
     * @param string $gmt_return
     * @return $this
     */
    public function setGmtReturn($gmt_return)
    {
        $this->params['gmt_return'] = $gmt_return;
        return $this;
    }

    /**
     * YYYYMMDDHHMMSS 北京时间(+8)
     * @return null|string
     */
    public function getGmtReturn()
    {
        return isset($this->params['gmt_return']) ? $this->params['gmt_return'] : null;
    }

    /**
     * 人民币退款金额
     * @param float $return_rmb_amount
     * @return $this
     */
    public function setReturnRmbAmount($return_rmb_amount)
    {
        $this->params['return_rmb_amount'] = $return_rmb_amount;
        return $this;
    }

    /**
     * 人民币退款金额
     * @return null|string
     */
    public function getReturnRmbAmount()
    {
        return isset($this->params['return_rmb_amount']) ? $this->params['return_rmb_amount'] : null;
    }

    /**
     * 退款原因
     * @param string $reason
     * @return $this
     */
    public function setReason($reason)
    {
        $this->params['reason'] = $reason;
        return $this;
    }

    /**
     * 退款原因
     * @return null|string
     */
    public function getReason()
    {
        return isset($this->params['reason']) ? $this->params['reason'] : null;
    }

    /**
     * 	网站支付: NEW_OVERSEAS_SELLER 手机浏览器或支付宝钱包支付: NEW_WAP_OVERSEAS_SELLER
     * @param string $product_code
     * @return $this
     */
    public function setProductCode($product_code)
    {
        $this->params['product_code'] = $product_code;
        return $this;
    }

    /**
     * 	网站支付: NEW_OVERSEAS_SELLER 手机浏览器或支付宝钱包支付: NEW_WAP_OVERSEAS_SELLER
     * @return null|string
     */
    public function getProductCode()
    {
        return isset($this->params['product_code']) ? $this->params['product_code'] : null;
    }

    /**
     * 分账信息
     * @param string $split_fund_info
     * @return $this
     */
    public function setSplitFundInfo($split_fund_info)
    {
        $this->params['split_fund_info'] = $split_fund_info;
        return $this;
    }

    /**
     * 分账信息
     * @return null|string
     */
    public function getSplitFundInfo()
    {
        return isset($this->params['split_fund_info']) ? $this->params['split_fund_info'] : null;
    }

    public function getBizContent()
    {
        if(empty($this-$this->getOutReturnNo())){
            throw new \Exception('参数【out_return_no】不能为空',50001);
        }
        if(empty($this->getOutTradeNo())){
            throw new \Exception('参数【out_trade_no】不能为空',50002);
        }
        if(empty($this->getReturnAmount())){
            throw new \Exception('参数【return_amount】不能为空',50003);
        }
        if(empty($this->getGmtReturn())){
            throw new \Exception('参数【gmt_return】不能为空',50004);
        }
        if(empty($this->getProductCode())){
            throw new \Exception('参数【product_code】不能为空',50005);
        }
        return parent::getBizContent();
    }

    public  function getServiceName()
    {
        return 'forex_refund';
    }
}